home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Magnum One
/
Magnum One (Mid-American Digital) (Disc Manufacturing).iso
/
d12
/
asmbler.arc
/
ANSI.ASM
next >
Wrap
Assembly Source File
|
1988-11-19
|
17KB
|
739 lines
COM41A EQU 041AH
COM41C EQU 041CH
DEVICEHEADER STRUC
NDEVICE DD -1 ; 0
ATTRIB DW 0 ; 4
STRAG DW 0 ; 6
INTER DW 0 ; 8
NAME DB ' ' ; 10
DEVICEHEADER ENDS ; 18
REQUESTHEADER STRUC
LENGTH DB
UNITCOD DB
COMMCOD DB
STATUS DW
RESERVE DB 8 DUP (0)
REQUESTHEADER ENDS
INITREQUEST STRUC
DUMINIT DB SIZE REQUESTHEADER DUP (0)
NUMUNIT DB
DEVEND DD
DEVBPB DD
INITREQUEST ENDS
IOREQUEST STRUC
DUMIO DB SIZE REQUESTHEADER DUP (0)
MEDIA DB
DATAADR DD
COUNT DW
START DW
IOREQUEST ENDS
NDIREQUEST STRUC
DUMNDI DB SIZE REQUESTHEADER DUP (0)
DATAOUT DB
NDIREQUEST ENDS
TABLE STRUC
DBYTE DB
ADDR DW
TABLE ENDS
ANSIDRIVER SEGMENT PUBLIC PARA 'CODE'
ASSUME CS:ANSIDRIVER,DS:ANSIDRIVER
ANSIDEV DEVICEHEADER <,8013H,QUEUECALL,EXECUCALL,'CON '>
COMMTBL DW INITPROC ; 0012 0609 0
DW BADCOMMAND ; 0014 00DE 1
DW BADCOMMAND ; 0016 00DE 2
DW IOCTLINPUT ; 0018 00D8 3
DW INPUTPROC ; 001A 01F6 4
DW NDINPUTPROC ; 001C 0278 5
DW BADCOMMAND ; 001E 00DE 6
DW IFLUSHPROC ; 0020 02BC 7
DW OUTPUTPROC ; 0022 02D8 8
DW OUTPUTPROC ; 0024 02D8 9
DW BADCOMMAND ; 0026 00DE 10
DW BADCOMMAND ; 0028 00DE 11
; 2A
TABLE <041H,DUMMY93>
TABLE <042H,DUMMY87>
TABLE <043H,DUMMY84>
TABLE <044H,DUMMY85>
TABLE <048H,DUMMY83>
TABLE <04AH,DUMMY91>
TABLE <04BH,DUMMY92>
TABLE <052H,DUMMY38>
TABLE <066H,DUMMY83>
TABLE <068H,DUMMY97>
L49 TABLE <06CH,DUMMY96>
TABLE <06DH,DUMMY90>
L4E TABLE <06EH,DUMMY94>
TABLE <070H,DUMMY99>
TABLE <073H,DUMMY95>
TABLE <075H,DUMMY89>
DB 000H,000H,000H
DB 007H,001H,0FFH
DB 008H,004H
L62 DB 0F8H
; 63
DB 001H,005H,0FFH,080H,007H
DB 0F8H,070H,008H,088H,000H,01EH,0F8H,000H
; 70
DB 01FH,0F8H,004H,020H,0F8H,002H,021H,0F8H
DB 006H,022H,0F8H,001H,023H,0F8H,005H,024H
; 80
DB 0F8H,003H,025H,0F8H,007H,028H,08FH,000H
DB 029H,08FH,040H,02AH,08FH,020H,02BH,08FH
; 90
DB 060H,02CH,08FH,010H,02DH,08FH,050H,02EH
DB 08FH,030H,02FH,08FH,070H,0FFH
REQADDR DD 0 ; 009E,00A0
QUEUECALL PROC FAR
MOV CS:WORD PTR REQADDR,BX
MOV CS:WORD PTR REQADDR[2],ES
RET
QUEUECALL ENDP
EXECUCALL PROC FAR
PUSH SI
PUSH AX
PUSH CX
PUSH DX
PUSH DI
PUSH BP
PUSH DS
PUSH ES
PUSH BX
LDS BX,CS:REQADDR
MOV CX,[BX].COUNT
MOV AL,[BX].COMMCOD
CBW
MOV SI,OFFSET COMMTBL ; 0012
ADD SI,AX
ADD SI,AX
CMP AL,0BH
JA IOCTLINPUT
LES DI,[BX].DATAADR
PUSH CS
POP DS
JMP WORD PTR [SI]
DUMMY14:
MOV AH,03H
JMP SHORT RETURN
IOCTLINPUT:
MOV AL,03H
MOV AH,81H
JMP SHORT RETURN
BADCOMMAND:
MOV AH,01H
RETURN:
LDS BX,CS:REQADDR
MOV [BX].STATUS,AX
POP BX
POP ES
POP DS
POP BP
POP DI
POP DX
POP CX
POP AX
POP SI
RET
EXECUCALL ENDP
KEYBREAK:
MOV CS:L114,03H
IRET
LFA DB 0H
LFB DW 4H
LFD DW DUMMY18
LFF DB 3H
MAXCOL DB 4FH
COL DB 0H
ROW DB 0H
L103 DW 0H
L105 DB 0H
L106 DW 0H
L108 DB 0H
L109 DW KBDTABLE
L10B DB 1BH,5BH
L10D DW 3030H
DB 3BH
L110 DW 3030H
DB 52H,0DH
L114 DB 0H
FGNDCLR DB 7H
DPAGE DB 0H
VIDEOB DW 0B800H
L119 DW 0H
DUMMY56:
CMP AL,0DH
JNZ NOCR
MOV COL,00H
JMP SHORT CONT
NOCR:
CMP AL,0AH
JZ DOLF
CMP AL,07H
JNZ NOBEL
OUTCHR: MOV BX,WORD PTR FGNDCLR
AND BL,07H
MOV AH,0EH
INT 10H
GORET: RET
NOBEL: CMP AL,08H
JNZ NOBS
CMP COL,00H
JZ GORET
DEC COL
JMP SHORT CONT
NOBS: MOV BX,WORD PTR FGNDCLR
MOV CX,1H
MOV AH,09H
INT 10H
INC COL
MOV AL,COL
CMP AL,MAXCOL
JBE CONT
CMP LFA,00H
JZ CLRROW
DEC COL
RET
CLRROW: MOV COL,00H
DOLF: INC ROW
CMP ROW,19H
JB CONT
MOV ROW,18H
CALL DUMMY50
CONT: MOV DH,ROW
MOV DL,COL
MOV BH,DPAGE
MOV AH,02H
INT 10H
RET
DUMMY50:
MOV AL,LFF
CMP AL,02H
JE NOAUTO
CMP AL,03H
JE NOAUTO
MOV AL,0AH
JMP OUTCHR
NOAUTO:
MOV BH,FGNDCLR
MOV BL,20H
MOV BP,50H
MOV AX,VIDEOB
ADD AX,L119
MOV ES,AX
MOV DS,AX
XOR DI,DI
MOV SI,0A0H
MOV CX,780H
CLD
CMP CS:VIDEOB,0B800H
JZ WAITCOLOR
REP MOVSW
MOV AX,BX
MOV CX,BP
REP STOSW
GORET1:
PUSH CS
POP DS
RET
WAITCOLOR:
MOV DX,03DAH
LP1: IN AL,DX
TEST AL,08H
JZ LP1
MOV AL,25H
MOV DX,03D8H
OUT DX,AL
REP MOVSW
MOV AX,BX
MOV CX,BP
REP STOSW
MOV AL,29H
MOV DX,03D8H
OUT DX,AL
JMP GORET1
INPUTPROC:
JCXZ NOCHARS
LP3: PUSH CX
CALL DUMMY51
POP CX
STOSB
LOOP LP3
NOCHARS:
JMP BADCOMMAND
DUMMY51:
XOR AX,AX
XCHG L114,AL
OR AL,AL
JNZ GORET3
DUMMY4:
CMP L108,00H
JNZ DUMMY1
XOR AH,AH
INT 16H
CALL DUMMY52
JNZ DUMMY2
DEC CX
DEC CX
INC BX
INC BX
OR AL,AL
JNZ DUMMY3
DEC CX
INC BX
DUMMY3:
MOV L108,CL
MOV L109,BX
CALL DUMMY1
DUMMY2:
OR AX,AX
JZ DUMMY4
OR AL,AL
JNZ GORET3
MOV L114,AH
GORET3: RET
DUMMY1:
MOV BX,L109
MOV AX,[BX]
DEC L108
INC BX
OR AL,AL
JNZ DUMMY5
INC BX
DEC L108
DUMMY5:
MOV L109,BX
RET
DUMMY52:
MOV BX,OFFSET KBDTABLE
DUMMY9:
MOV CL,[BX]
XOR CH,CH
OR CX,CX
JZ DUMMY6
OR AL,AL
JNZ DUMMY7
CMP AX,[BX+01]
JMP SHORT DUMMY8
DUMMY7:
CMP AL,[BX+01]
DUMMY8:
JZ GORET4
ADD BX,CX
JMP DUMMY9
DUMMY6:
OR BX,BX
GORET4: RET
NDINPUTPROC:
MOV AL,L114
OR AL,AL
JNZ DUMMY10
CMP L108,00H
JZ DUMMY11
MOV BX,L109
MOV AL,[BX]
JMP SHORT DUMMY10
DUMMY11:
MOV AH,01H
INT 16H
JZ DUMMY12
OR AX,AX
JNZ DUMMY13
MOV AH,00H
INT 16H
JMP NDINPUTPROC
DUMMY13:
CALL DUMMY52
JNZ DUMMY10
MOV AL,[BX+02]
CMP BYTE PTR [BX+01],00
JNZ DUMMY10
MOV AL,[BX+03]
DUMMY10:
LDS BX,REQADDR
MOV [BX].DATAOUT,AL
DUMMY15:
JMP BADCOMMAND
DUMMY12:
JMP DUMMY14
IFLUSHPROC:
MOV L114,00H
MOV L108,00H
PUSH DS
XOR BP,BP
MOV DS,BP
MOV BYTE PTR ANSIDEV[COM41A],1EH ; Bad fake of MASM
MOV BYTE PTR ANSIDEV[COM41C],1EH
POP DS
JMP DUMMY15
OUTPUTPROC:
JCXZ DUMMY15
LP2: MOV AL,ES:[DI]
INC DI
CALL DUMMY53
LOOP LP2
JMP DUMMY15
DUMMY74:
STI
PUSH DS
PUSH CS
POP DS
CALL DUMMY53
POP DS
IRET
DUMMY53:
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
PUSH ES
PUSH BP
MOV VIDEOB,0B800H
XCHG SI,AX
MOV AX,0040H
MOV DS,AX
MOV AX,L49.ADDR
DEC AH
MOV WORD PTR CS:LFF,AX
CMP AL,07H
JNZ DUMMY16
MOV CS:VIDEOB,0B000H
DUMMY16:
MOV AL,L62
MOV CS:DPAGE,AL
CBW
ADD AX,AX
MOV BX,AX
MOV AX,[BX+50H]
MOV WORD PTR CS:COL,AX
MOV AX,WORD PTR L4E
MOV CL,04H
SHR AX,CL
PUSH CS
POP DS
MOV L119,AX
XCHG SI,AX
CALL DUMMY54
POP BP
POP ES
POP DI
POP SI
POP DX
POP CX
POP BX
POP AX
RET
DUMMY54:
MOV SI,OFFSET LFD
JMP WORD PTR [SI]
DUMMY72:
CMP AL,5BH
JZ DUMMY17
JMP DUMMY18
DUMMY17:
MOV WORD PTR [SI],OFFSET DUMMY70
XOR BX,BX
MOV WORD PTR L105,BX
JMP SHORT DUMMY19
DUMMY70:
CMP AL,03BH
JNZ DUMMY20
DUMMY25:
INC BYTE PTR L106
DUMMY19:
CALL DUMMY43
XOR AX,AX
MOV [BX],AX
RET
DUMMY20:
CMP AL,30H
JB DUMMY21
CMP AL,39H
JA DUMMY21
CALL DUMMY43
SUB AL,30H
XCHG [BX],AL
MOV AH,0AH
MUL AH
ADD [BX],AL
RET
DUMMY21:
CMP AL,3DH
JZ GORET5
CMP AL,3FH
JZ GORET5
CMP AL,22H
JZ DUMMY22
CMP AL,27H
JNZ DUMMY23
DUMMY22:
MOV WORD PTR [SI],OFFSET DUMMY71
MOV L105,AL
GORET5: RET
DUMMY71:
CMP AL,L105
JNZ DUMMY24
DEC BYTE PTR L106
MOV WORD PTR [SI],OFFSET DUMMY70
RET
DUMMY24:
CALL DUMMY43
MOV [BX],AL
MOV WORD PTR [SI],OFFSET DUMMY71
JMP DUMMY25
DUMMY23:
MOV BX,0027H
DUMMY26:
ADD BX,+03
CMP BYTE PTR [BX],00H
JZ DUMMY27
CMP [BX],AL
JNZ DUMMY26
MOV AX,[BX+01]
MOV BX,OFFSET KBDTABLE
INC BX
ADD BX,LFB
MOV DL,[BX]
XOR DH,DH
MOV CX,DX
OR CX,CX
JNZ DUMMY88
INC CX
DUMMY88:
JMP AX
DUMMY18:
CMP AL,1BH
JNZ DUMMY27
MOV WORD PTR [SI],OFFSET DUMMY72
RET
DUMMY27:
CALL DUMMY56
DUMMY29:
MOV LFD,OFFSET DUMMY18
RET
DUMMY32:
CMP [BX],AH
JZ DUMMY28
ADD [BX],AL
LOOP DUMMY32
DUMMY28:
MOV DX,WORD PTR COL
XOR BX,BX
MOV AH,02H
INT 10H
JMP DUMMY29
DUMMY83:
CMP CL,19H
JA DUMMY28
MOV AL,MAXCOL
MOV CH,[BX+01]
OR CH,CH
JZ DUMMY30
DEC CH
DUMMY30:
CMP AL,CH
JA DUMMY31
MOV CH,AL
DUMMY31:
XCHG CL,CH
DEC CH
MOV WORD PTR COL,CX
JMP DUMMY28
DUMMY84:
MOV AH,MAXCOL
MOV AL,01H
DUMMY33:
MOV BX,OFFSET COL
JMP DUMMY32
DUMMY85:
MOV AX,OFFSET LFF
JMP DUMMY33
DUMMY93:
MOV AX,OFFSET LFF
DUMMY34:
MOV BX,OFFSET ROW
JMP DUMMY32
DUMMY87:
MOV AX,1801H
JMP DUMMY34
DUMMY95:
MOV AX,WORD PTR COL
MOV L103,AX
JMP DUMMY28
DUMMY89:
MOV AX,L103
MOV WORD PTR COL,AX
JMP DUMMY28
DUMMY90:
XOR CX,CX
XCHG L106,CL
CALL DUMMY43
INC CX
LP4: MOV AL,[BX]
PUSH BX
MOV BX,005BH
DUMMY86:
MOV AH,[BX]
ADD BX,+03H
CMP AH,0FFH
JZ DUMMY35
CMP AH,AL
JNZ DUMMY86
MOV AX,[BX-02]
AND FGNDCLR,AL
OR FGNDCLR,AH
DUMMY35:
POP BX
INC BX
LOOP LP4
JMP DUMMY28
DUMMY91:
XOR CX,CX
MOV WORD PTR COL,CX
MOV DH,19H
DUMMY36:
MOV DL,MAXCOL
MOV BH,FGNDCLR
MOV AX,0600H
INT 10H
JMP DUMMY28
DUMMY92:
MOV CX,WORD PTR COL
MOV DH,CH
JMP DUMMY36
DUMMY57:
MOV DL,0AH
INC AL
XOR AH,AH
DIV DL
ADD AX,3030H
RET
DUMMY94:
MOV AL,ROW
CALL DUMMY57
MOV L10D,AX
MOV AL,COL
CALL DUMMY57
MOV L110,AX
MOV L108,09H
MOV L109,OFFSET L10B
DUMMY38:
JMP DUMMY29
DUMMY96:
MOV CL,01H
JMP SHORT DUMMY37
DUMMY97:
XOR CX,CX
DUMMY37:
MOV AL,DL
CMP AL,07H
JA DUMMY38
JB DUMMY39
MOV LFA,CL
RET
DUMMY39:
MOV AH,00H
INT 10H
JMP DUMMY38
DUMMY99:
XOR DX,DX
XCHG L106,DL
INC DX
INC DX
CALL DUMMY43
MOV AX,[BX]
CALL DUMMY52
JNZ DUMMY40
MOV DI,BX
SUB LFB,CX
MOV SI,DI
ADD SI,CX
MOV CX,OFFSET INITPROC
SUB CX,SI
CLD
PUSH ES
PUSH CS
POP ES
REP MOVSB
POP ES
DUMMY40:
CALL DUMMY43
CMP DL,03H
JB DUMMY41
MOV [BX-01],DL
ADD LFB,DX
ADD BX,DX
DUMMY41:
MOV BYTE PTR [BX-01],00
MOV LFD,OFFSET DUMMY18
RET
DUMMY43:
MOV BX,LFB
INC BX
ADD BX,L106
CMP BX,00C8H
JB DUMMY42
DEC BYTE PTR L106
JMP DUMMY43
DUMMY42:
ADD BX,OFFSET KBDTABLE
RET
KBDTABLE:
ADD AL,00
JB DUMMY44
DW 8 DUP (0)
DUMMY44:
DW 90 DUP (0)
INITPROC:
INT 11H
AND AL,30H ; Check type of video card
CMP AL,30H
JNZ COLORCARD
MOV VIDEOB,0B000H
COLORCARD:
CMP AL,10H ; 40 or 80 columns
JA D80COLUMNS
MOV LFF,00
MOV MAXCOL,27H
D80COLUMNS:
XOR BX,BX
MOV DS,BX
MOV BX,4 * 1BH
MOV WORD PTR [BX],OFFSET KEYBREAK
MOV [BX+02],CS
MOV BX,4 * 29H
MOV WORD PTR [BX],OFFSET DUMMY74
MOV [BX+02],CS
LDS BX,CS:REQADDR
MOV WORD PTR [BX].DEVEND,OFFSET INITPROC
MOV WORD PTR [BX+2].DEVEND,CS
JMP BADCOMMAND
;064D
DB 51 DUP (0)
ANSIDRIVER ENDS
END